package fr.afcepf.ai89.esharing.data;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import fr.afcepf.ai89.esharing.entity.PromotionParc;
import fr.afcepf.ai89.esharing.entity.Proprietaire;

@Stateless
public class DAOPromotionParc implements IDAOPromotionParc {

	@PersistenceContext(unitName = "ESharingPhase22")
	EntityManager em;

	@Override
	public PromotionParc getPromoParc(int idPromoParc) {
		Query hql = em.createQuery("SELECT promo FROM PromotionParc promo WHERE promo.idPromotionParc = :idPromo");
		hql.setParameter("idPromo", idPromoParc);
		return (PromotionParc) hql.getSingleResult();
	}

	@Override
	public List<PromotionParc> getPromosParc() {
		Query hql = em
				.createQuery("SELECT promo FROM PromotionParc promo INNER JOIN FETCH promo.proprietaire");
		List<PromotionParc> promos = hql.getResultList();
		return promos;
	}

	@Override
	public List<PromotionParc> getPromosParc(Proprietaire prop) {
		Query hql = em
				.createQuery("SELECT promo FROM PromotionParc promo INNER JOIN FETCH promo.proprietaire WHERE promo.proprietaire = :prop");
		hql.setParameter("prop", prop);
		List<PromotionParc> promos = hql.getResultList();
		return promos;
	}

	@Override
	public int promouvoirParc(PromotionParc promoParc) {
		em.persist(promoParc);
		
		Query hql = em.createQuery("SELECT MAX(idPromotionParc) FROM PromotionParc promo");
		int idPormo = (Integer)hql.getSingleResult();
		
		return idPormo;
	}

	@Override
	public int majPromoParc(PromotionParc promoParc) {
		PromotionParc newPromoParc = em.find(PromotionParc.class, promoParc.getIdPromotionParc());
		newPromoParc.setDateDebutPromotionParc(promoParc.getDateDebutPromotionParc());
		newPromoParc.setDateFinPromotionParc(promoParc.getDateFinPromotionParc());
		newPromoParc.setNomPromotionParc(promoParc.getNomPromotionParc());
		newPromoParc.setPourcentReducParc(promoParc.getPourcentReducParc());
		newPromoParc.setProprietaire(promoParc.getProprietaire());
		newPromoParc.setRaisonPromotionParc(promoParc.getRaisonPromotionParc());
		em.merge(newPromoParc);
		return newPromoParc.getIdPromotionParc();
	}

}
